package com.dai.zhenfujin.utils;

/**
 * Created by huanghao on 2019/7/3.
 */

import android.content.Context;

import com.amap.api.services.core.LatLonPoint;
import com.amap.api.services.core.PoiItem;
import com.amap.api.services.core.SuggestionCity;
import com.amap.api.services.poisearch.PoiResult;
import com.amap.api.services.poisearch.PoiSearch;
import com.amap.api.services.poisearch.PoiSearch.SearchBound;
import com.dai.zhenfujin.visitingcard.adapter.PoiAdapter;
import com.dai.zhenfujin.visitingcard.app.LocationActiviy;
import com.dai.zhenfujin.visitingcard.app.bean.LocationBean;

import java.util.ArrayList;
import java.util.List;

public class PoiSearchTask implements PoiSearch.OnPoiSearchListener {

    private static PoiSearchTask mInstance;
    private PoiAdapter mAdapter;
    private PoiSearch mSearch;
    private Context mContext;
    private int currentPage = 0;// 当前页面，从0开始计数
    private String POI_SEARCH_TYPE =
            "//汽车维修|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|" +
            "//住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|" +
            "//金融保险服务|公司企业|道路附属设施|地名地址信息";
    private String POI_SEARCH_TYPE2 = "汽车服务|汽车销售|" +
            "//汽车维修|摩托车服务|餐饮服务|购物服务|生活服务|体育休闲服务|医疗保健服务|" +
            "//住宿服务|风景名胜|商务住宅|政府机构及社会团体|科教文化服务|交通设施服务|" +
            "//金融保险服务|公司企业|道路附属设施|地名地址信息|公共设施";


    private PoiSearchTask(Context context){
        this.mContext = context;
    }

    public static PoiSearchTask getInstance(Context context){
        if(mInstance == null){
            synchronized (PoiSearchTask.class) {
                if(mInstance == null){
                    mInstance = new PoiSearchTask(context);
                }
            }
        }
        return mInstance;
    }

    public PoiSearchTask setAdapter(PoiAdapter adapter){
        this.mAdapter = adapter;
        return this;
    }

    public void onSearch(String key, String city,double lat,double lng){
        // 第一个参数表示搜索字符串，第二个参数表示poi搜索类型，第三个参数表示poi搜索区域（空字符串代表全国）
        PoiSearch.Query query = new PoiSearch.Query(key, POI_SEARCH_TYPE, city);
        query.setPageSize(15);
        mSearch = new PoiSearch(mContext, query);
        mSearch.setBound(new SearchBound(new LatLonPoint(lat, lng), 500,true));//设置周边搜索的中心点以及半径
        //设置异步监听
        mSearch.setOnPoiSearchListener(this);
        //查询POI异步接口
        mSearch.searchPOIAsyn();
    }

    public void onSearchText(String key, String city){
        // 第一个参数表示搜索字符串，第二个参数表示poi搜索类型，第三个参数表示poi搜索区域（空字符串代表全国）
        PoiSearch.Query query = new PoiSearch.Query(key, POI_SEARCH_TYPE2, city);
        query.setPageSize(20);
        mSearch = new PoiSearch(mContext, query);
    //    mSearch.setBound(new SearchBound(new LatLonPoint(lat, lng), 3000,true));//设置周边搜索的中心点以及半径
        //设置异步监听
        mSearch.setOnPoiSearchListener(this);
        //查询POI异步接口
        mSearch.searchPOIAsyn();
    }


    @Override
    public void onPoiSearched(PoiResult poiResult, int rCode) {
        if(rCode == 1000) {
            if (poiResult != null && poiResult.getQuery() != null) {
                ArrayList<LocationBean> datas = new ArrayList<>();
                ArrayList<String> titles = new ArrayList<>();
                List<SuggestionCity> suggestionCities = poiResult.getSearchSuggestionCitys();// 当搜索不到poiitem数据时，会返回含有搜索关键字的城市信息
                ArrayList<PoiItem> items = poiResult.getPois(); //取得第一页的poiitem数据，页数从数字0开始
                if (items != null && items.size() > 0) {
                    datas.clear();
                    titles.clear();
                    for (PoiItem item : items) {
                        //获取经纬度对象
                        LatLonPoint llp = item.getLatLonPoint();
                        double lon = llp.getLongitude();
                        double lat = llp.getLatitude();
                        //获取标题
                        String title = item.getTitle();
                        //获取内容
                        String text = item.getSnippet();
                        titles.add(title);
                        datas.add(new LocationBean(lon, lat, title, text));
                    }
                }

                if (titles.contains(LocationActiviy.title)){
                    return;
                }
                mAdapter.setData(datas);
                mAdapter.notifyDataSetChanged();

            }
        }
    }

    @Override
    public void onPoiItemSearched(PoiItem poiItem, int i) {

    }
}

